/*
 * http请求/响应拦截器
*/

import axios from "axios"

// cookies
import { 
    getToken, 
    getUsername, 
    removeToken, 
    removeUsername,
    removeHeadImage,
    removeUserRole,
    removeUserid,
    removeActiveRouterPath, } from "@/utils/cookies";  // 这是封装好的方法

// ElementUI 单独引入
import { ElMessage } from 'element-plus'
// vue-router
import router from "@/router";
// 创建实例
const instance = axios.create({
    baseURL: process.env.VUE_APP_API_URL,    // 请求地址
    // baseURL: "/api",
    timeout: 5000,  // 超时
    headers: {
        'Content-Type': "application/json;charset=UTF-8"
    },
});
// 拦截器
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    if(getToken()) {
        config.headers['token'] = getToken();        // 携带token
    }
    if(getUsername()) {
        config.headers['username'] = getUsername();  // 携带用户名
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});
// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // console.log('request.js响应拦截器响应了：',response)
    console.log('request.js响应拦截器响应了data：',response.data)
    // 对响应数据做点什么
    const data = response.data;

    if (data.code === 210) {    // token过期或未登录
        removeToken();
        removeUsername();
        removeHeadImage();
        removeUserRole() ;
        removeUserid() ;
        window.location.href = "/"
    }
    if(data.code === 200) {
        return Promise.resolve(data);
    } else if (data.code === 400210 || data.code === 400220 || data.code === 500220 || data.code === 500210) {
        ElMessage({
            message: data.msg,
            type: "error"
        })
        removeToken();
        removeUsername();
        removeHeadImage();
        removeUserid() ;
        removeActiveRouterPath();
        router.push({ path: "/login" });
    } else {
        ElMessage({
            message: data.msg,
            type: "error"
        })
        // return Promise.reject(data);
        return Promise.resolve(data) ;
    }
}, function (error) {
    console.log("request.js响应拦截器失败了！！！",error.request.response);
    const errorData = JSON.parse(error.request.response);
    console.log("request.js响应拦截器errordata",errorData)
    if(errorData.msg) {
        ElMessage({
            message: errorData.msg,
            type: "error"
        })
    }
    // token失效自动退出
    if(errorData.code === 210 || errorData.code === 400210) {
        removeToken();
        removeUsername();
        removeHeadImage();
        removeUserid() ;
        removeActiveRouterPath();
        // router.replace({
        //     name: "Login"
        // })
        router.push({ path: "/login" });
    }
    // 对响应错误做点什么
    return Promise.reject(errorData);
});
// 暴露instance
export default instance;
